package com.qqt.csr.message.event;

import com.qqt.csr.message.enums.NotifyType;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;

import java.util.List;

/**
 * @Author: yang hao
 * @Date: 2024/12/11 10:07
 * @Description: 消息事件
 **/
@Getter
public abstract class MessageEvent<I, O> extends ApplicationEvent {

    /**
     * 消息类型
     */
    private final transient NotifyType notifyType;

    /**
     * 创建一个新的消息事件
     * @param source {@link I} 消息来源
     * @param notifyType {@link NotifyType} 消息类型
     */
    public MessageEvent(I source, NotifyType notifyType) {
        super(source);
        this.notifyType = notifyType;
    }

    /**
     * 消息来源
     * @return {@link I} 消息来源
     */
    @Override
    @SuppressWarnings("unchecked")
    public I getSource() {
        return (I) super.getSource();
    }

    /**
     * 获取消息实体集合
     * @return {@link List<O>} 消息实体集
     */
    public abstract List<O> message();

}
